Methods, apparatus and system for mobile piggybacking

ABSTRACT

Methods, systems, and apparatus for providing assistance to a user of a mobile application are described. A request is issued to a remote from a mobile device device for assistance. Information indicative of a sequence of states of an execution of a mobile application is periodically transmitted from a mobile device to the remote device.

CLAIM OF PRIORITY

This application is a continuation of and claims the benefit of priorityunder to U.S. patent application Ser. No. 14/075,582, filed on Nov. 8,2013, now U.S. Pat. No. 9,436,428, which claims the benefit of priorityunder to U.S. Provisional Patent Application Ser. No. 61/724,180 filedNov. 8, 2012, the benefit of priority of each of which is claimedhereby, and each of which are incorporated by reference herein in itsentirety.

COPYRIGHT NOTICE

A portion of the disclosure of this patent document contains materialthat is subject to copyright protection. The copyright owner has noobjection to the facsimile reproduction by anyone of the patent documentor the patent disclosure, as it appears in the Patent and TrademarkOffice patent files or records, but otherwise reserves all copyrightrights whatsoever. The following notice applies to the software and dataas described below and in the drawings that form a part of thisdocument: Copyright eBay, Inc., All Rights Reserved.

BACKGROUND

Mobile applications executing on portable computing devices (e.g.,mobile phones, tablets, laptops, smart watches, and the like) are oftenstreamlined versions of popular desktop applications or web services.These applications often feature larger graphics, simpler layout, and amore touch-friendly interface. Despite the focus on making theseapplications simpler, it is still possible for mobile users to haveproblems with the applications. These problems may include confusionover how to properly utilize the features of an application, applicationerrors, or errors in communication between a mobile application and anetwork service (e.g., a network based marketplace).

BRIEF DESCRIPTION OF THE DRAWINGS

In the drawings, which are not necessarily drawn to scale, like numeralsmay describe similar components in different views. Like numerals havingdifferent letter suffixes may represent different instances of similarcomponents. The drawings illustrate generally, by way of example, butnot by way of limitation, various embodiments discussed in the presentdocument.

FIG. 1 illustrates a flowchart for an example client help applicationmethod, in accordance with an example embodiment.

FIG. 2 illustrates a flowchart for an example server help applicationmethod, in accordance with an example embodiment.

FIG. 3 shows a block diagram of an example help system, in accordancewith an example embodiment.

FIG. 4 shows a block diagram of an example network-based system, inaccordance with an example embodiment.

FIG. 5A shows a flowchart for an example method for assisting a customersupport agent in providing customer support, in accordance with anexample embodiment.

FIG. 5B shows a flowchart for an example method for providing customeragent support to a user, in accordance with an example embodiment.

FIG. 6 shows a block diagram of an example mobile device, in accordancewith an example embodiment.

FIG. 7 is a block diagram of a machine within which instructions may beexecuted for causing the machine to perform any one or more of themethodologies discussed herein.

DETAILED DESCRIPTION

The description that follows includes illustrative systems, methods,techniques, instruction sequences, and computing machine programproducts that embody illustrative embodiments. In the followingdescription, for purposes of explanation, numerous specific details areset forth in order to provide an understanding of various embodiments ofthe inventive subject matter. It will be evident, however, to thoseskilled in the art, that embodiments of the inventive subject matter maybe practiced without these specific details. In general, well-knowninstruction instances, protocols, structures, and techniques have notbeen shown in detail.

Disclosed in some examples is a system and method for allowing acustomer support agent to view and/or control a mobile application froma remote terminal. A user encountering problems with a mobileapplication may trigger a client help application which allows acustomer support agent to view, or in some examples, view and control,the application on the user's mobile device using a server helpapplication. In one example embodiment, the customer support agent mayconverse with the user of the mobile application simultaneously over avoice connection on the mobile device.

The help system may allow the customer support agent to view the problemthat the user is experiencing and, in one example embodiment, perform aparticular action on behalf of the user. Since the customer supportagent may also have access to any back-end data, the customer supportagent may have a full-system view of the problem. For example, where theapplication on the mobile device is a client-server application, thecustomer support agent may be able to access the server-based portionsof the application.

In one example embodiment, the system may have an emulator running atthe remote terminal that may receive data from the mobile applicationand that may mimic the application state and/or screen display of themobile application. This may allow the customer support agent to viewthe user's mobile application experience. The emulator may emulate themobile application by obtaining state information from the mobileapplication running on the client device and/or by obtaining commandinformation submitted to the mobile application running on the clientdevice (by, for example, a user of the client device). In one exampleembodiment, the emulator may emulate the mobile application byprocessing screen shots from the client device to determine the state ofthe mobile application running on the client device and/or by processingscreen shots received from the client device to determine inputs (e.g.,commands) provided to the mobile application running on the clientdevice.

In one example embodiment, the system may have an emulator running atthe remote terminal that may receive data from the mobile applicationand that may mimic the application state and screen display of themobile application. This may allow the customer support agent to viewthe user's mobile application experience.

The customer support agent may issue commands to the mobile applicationon the mobile device. The commands may include inputting information tovarious user input fields, executing actions on behalf of the user, andthe like. Commands may be entered by the customer support agent using avariety of different techniques. For example, the remote terminal mayspecify that certain mouse clicks, keyboard keys, touch screen inputs,drop down menus, command line interfaces, button presses, and the likeinitiate certain commands to be executed by the mobile application.

In one example embodiment, the client help application may be part ofthe mobile application itself. For example, the client help applicationmay be a module or component of the software that the user is havingtrouble with and for which help is desired. In one example embodiment,the help application may be deployed to the mobile device and mayprocess the screen captures (or intercept the screen commands, orotherwise send data about the state of the device to allow for viewingof the user's mobile application experience), and may inject commandsinto the mobile device at the request of the customer service agent atthe remote terminal without being integrated into the mobileapplication. For example, the client help application may be a separateapplication, may be integrated into the operating system of the mobiledevice, and the like. The client help application may allow for helpingusers with multiple different applications. For descriptive convenience,the client help functionality will be referred to herein as the clienthelp application regardless of whether it is part of another applicationor a stand-alone application.

Activating remote support using the client help application may beinitiated in a variety of ways. In one example embodiment, variousbuttons and user input dialogues may be embedded in the mobileapplication to enable users to launch the remote help features. The usermay access the help functionality via a gesture, a universal “hot spot”on the screen (e.g., holding a finger on a particular spot on the screenfor more than a predefined time period to initiate help, or similarmethods), a particular input into an accelerometer on the device (e.g.,shaking the device in a certain manner or fashion), voice input (e.g.,speaking “help” into the speaker of the device), automatically upon anapplication error, selection from a menu, launching an application, orthe like.

In addition to being able to view the screen of the user and control thescreen, the application may also send application state information anddevice state information to the remote terminal for viewing by thecustomer agent. Example device state information may include a memorydump (e.g., a stack or heap dump or trace), a list of the variousprocesses running in memory on the mobile device (and associated dataabout those processes such as CPU utilization, memory allocation, memoryaddresses, execution parameters, and the like), operating systeminformation, wireless data information (e.g., bandwidth, carrier,connection type, or the like), display screen information (e.g.,resolution, etc.), device identifier (e.g., UDID), network traces,Wireless network information (e.g., cell or WiFi), or any other deviceinformation. Example application state information may include userpreference information (e.g., user's language, a preferred networkmarketplace online site, user identification information, localesettings, time zone settings), application state information,application memory contents, the application's program counter, and thelike.

The above example embodiments may be beneficially employed in a varietyof mobile application environments. One example environment may includean online marketplace application. For example, the eBay mobileapplication developed by eBay, Inc. of San Jose, Calif., which allowsusers to buy and sell items on the eBay online marketplace from theirmobile device.

FIG. 1 illustrates a flowchart for an example client help applicationmethod 1000, in accordance with an example embodiment. In one exampleembodiment, the client help application receives a user trigger to startthe help process (operation 1010). As already noted, in some examples,this may be done through a gesture, a motion, or some other user input.The client help application may be integrated with the mobileapplication on which the user is experiencing difficulty. The clienthelp application on the user's mobile device may contact the server helpapplication on the remote terminal to set up a help session (operation1020). While in these examples the user activated the client helpapplication that initiated the help session with the remote terminal, inone example embodiment, the remote terminal may initiate the helpsession. The client help application begins to transfer data, whichenables the server help application executing on the remote terminal toview a representation of the user's screen (operation 1030).Additionally, at operation 1030, the client help application may receivedata indicating one or more actions to execute on behalf of the userthat are sent from the server help application executing on the remoteterminal. The exchange of information between the client helpapplication and the server help application may continue until the helpsession is terminated by either the user at the mobile device or by theremote terminal. In an example embodiment, the client help applicationmay send device or application information along with the informationused to view the representation of the user's screen.

FIG. 2 illustrates a flowchart for an example server help applicationmethod 2000, in accordance with an example embodiment. In one exampleembodiment, the server help application receives a connection requestfrom a client help application (operation 2010). In some examples inwhich the client help software is not specific to a particularapplication, the client help software may indicate which software theuser is having difficulty with and needs support with. For example, theclient help software may indicate which software the user is havingdifficulty with in the connection request.

In one example embodiment, the services of a customer support agent maybe secured and the establishment of a voice communication session may beobtained automatically as part of establishing a connection between thecustomer support agent and the user. In one example embodiment, thevoice session may be on the same mobile device as the application forwhich the user is requesting assistance. The server help softwarenegotiates the screen capture parameters and captures a screen shot (orother data which allows for the creation of a representation of thescreen of the application or of the mobile device) from the client helpsoftware and displays it to the customer support agent (operation 2020).The server help application may receive input from the customer supportagent indicating that the customer support agent wishes to perform anaction on the mobile device (operation 2030). In response to receivingthe input from the customer support agent, the server help applicationmay send the command to the client help application and the client helpapplication may execute the command (operation 2040). For example, theclient help application may emulate certain keyboard keystrokes andmouse actions to execute the command.

At operation 2050, the server help application may receive a screenupdate from the client help application. The server help application mayupdate the screen for the customer support agent (operation 2060). Theserver help application method 2000 may repeat operations 2030-2060while the session is active. Once the session is terminated, the serverhelp application method 2000 may terminate. In one example embodiment,operations 2030-2040 may be executed in serial or parallel withoperations 2050-2060. For example, the screen updates for the remoteterminal and the command execution for the mobile application may beperformed simultaneously or nearly simultaneously.

It will be appreciated that various confirmation prompts and securitytechniques (e.g., encryption) may be utilized to prevent an attackerfrom utilizing these techniques for improper purposes.

FIG. 3 shows a block diagram of an example help system 3000, inaccordance with an example embodiment. A mobile device 3010 may includeone or more mobile applications 3020 that the user may need assistancewith. The mobile device 3010 may also include a device operating system3030 that interfaces and manages the hardware of the mobile device 3010and provides common services for the various mobile applications 3020.The mobile device 3010 may have a client help application 3040. Theclient help application 3040 may include a screen monitor module 3050which may be responsible for collecting data to send to a server helpapplication 3100 to update the server help application 3100's screen. Asdescribed more fully above, in one example embodiment, this may beperformed by periodically capturing screen shots by, for example,accessing the screen graphics buffer using the operating system 3030. Inone example embodiment, the client help application 3040 may snoop onthe calls to the graphics subroutines of the operating system 3030. Theclient help application 3040 may also contain an action module 3060 thatmay receive and process actions sent from the server help application3100 which are to be executed. In one example embodiment, the actionmodule 3060 may inject one or more user inputs or actions using theoperating system 3030. For example, simulated touches, clicks, buttonpresses, or the like may be injected into the operating system 3030. Inone example embodiment, the action module 3060 may access and changeapplication data from the mobile application 3020.

A control module 3070 may coordinate the activities of the client helpapplication 3040 and may be responsible for establishing a connectionwith the server help application 3100.

The client help application 3040 may communicate with a server helpapplication 3100 executing on one or more remote terminals (that are acomponent of assistance server 3090) over a network 3080. The mobiledevice 3010 may access the network 3080 in a variety of ways includingwired connections (such as Ethernet or dial-up modem), wirelessconnections (2G, 3G, 4G cellular, WiFi, Bluetooth, or the like), and thelike. The network 3080 may be or include portions of one or more of: theInternet, a Local Area Network (LAN), a Wide Area Network (WAN), acellular network, a Plain Old Telephone (POTS) network, and the like.

The server help application 3100 may include a control module 3110 whichmay facilitate the establishment of a connection with the client helpapplication 3040 and may provide the simulated display of the mobiledevice 3010 to one or more customer service agents at one or more remoteterminals (assistance server) 3090. The control module 3110 may receivescreen information (or other information which may be used to reproducethe display of the mobile device 3010 at the remote terminal (assistanceserver) 3090) from the client help application 3040 and instruct theoutput module 3130 to display the information. The control module 3110may also receive input through the input module 3120 from one or more ofthe customer service agents which utilize one or more of the features ofthe server help application 3100. The control module 3110 may processthis input and execute one or more instructions in response. Asdescribed above, in one example embodiment, these instructions cause theexecution of one or more commands on the mobile device 3010. The controlmodule 3110 may pass the commands to the action module 3060 of theclient help application 3040 for execution via the output module 3130.An input module 3120 and the output module 3130 communicate with clienthelp application 3040 over network 3080.

FIG. 4 shows a block diagram of an example network-based system 4000, inaccordance with an example embodiment. A networked system 4002, in theexample forms of a network-based marketplace or publication system,provides server-side functionality, via a network 4004 (e.g., theInternet or Wide Area Network (WAN)) to one or more clients. FIG. 4illustrates, for example, a web client 4006 (e.g., a browser, such asthe Internet Explorer browser developed by Microsoft Corporation ofRedmond, Washington State), and a programmatic client 4008 executing onrespective client machines 4010 and 4012.

An Application Program Interface (API) server 4014 and a web server 4016are coupled to, and provide programmatic and web interfaces respectivelyto, one or more application servers 4018. The application servers 4018host one or more marketplace applications 4020 and payment applications4022. The application servers 4018 are, in turn, shown to be coupled toone or more database servers 4024 that facilitate access to one or moredatabases 4026.

The marketplace applications 4020 may provide a number of marketplacefunctions and services to users that access the networked system 4002.For example, the marketplace applications 4020 may provide one or morebackground images. The payment applications 4022 may likewise provide anumber of payment services and functions to users. The paymentapplications 4022 may allow users to accumulate value (e.g., in acommercial currency, such as the U.S. dollar, or a proprietary currency,such as “points”) in accounts, and then later to redeem the accumulatedvalue for products (e.g., goods or services) that are made available viathe marketplace applications 4020. While the marketplace and paymentapplications 4020 and 4022 are shown in FIG. 4 to both form part of thenetworked system 4002, it will be appreciated that, in alternativeembodiments, the payment applications 4022 may form part of a paymentservice that is separate and distinct from the networked system 4002.

Further, while the network-based system 4000 shown in FIG. 4 employs aclient-server architecture, the embodiments of the present invention arenot limited to such an architecture, and could equally well findapplication in a distributed, or peer-to-peer, architecture system, forexample. The various marketplace and payment applications 4020 and 4022could also be implemented as standalone software programs, which do notnecessarily have networking capabilities.

The web client 4006 accesses the various marketplace and paymentapplications 4020 and 4022 via the web interface supported by the webserver 4016. Similarly, the programmatic client 4008 accesses thevarious services and functions provided by the marketplace and paymentapplications 4020 and 4022 via the programmatic interface provided bythe API server 4014. The programmatic client 4008 may, for example, be aseller application (e.g., the TurboLister application developed by eBayInc., of San Jose, Calif.) to enable sellers to author and managelistings on the networked system 4002 in an off-line manner, and toperform batch-mode communications between the programmatic client 4008and the networked system 4002. In other examples, the client machines4010, 4012 may be buyer machines which access the networked system 4002to buy products.

FIG. 4 also illustrates a third party application 4028, executing on athird party server machine 4030, as having programmatic access to thenetworked system 4002 via the programmatic interface provided by the APIserver 4014. For example, the third party application 4028 may,utilizing information retrieved from the networked system 4002, supportone or more features or functions on a website hosted by the thirdparty. The third party website may, for example, provide one or morepromotional, marketplace or payment functions that are supported by therelevant applications of the networked system 4002.

Also shown in FIG. 4 are one or more assistance servers 4042 which mayexecute one or more server help applications (e.g., such as server helpapplication 3100 described more fully above in conjunction with FIG. 3)which may be in communication with one or more of the third party servermachines 4030, the client machine 4010, the client machine 4012 or someother machine on which the client help application (e.g., client helpapplication 3040 from FIG. 3) may execute. In addition, the assistanceservers 4042 may have access to the marketplace and payment applications4020, 4022 either directly or through the API or Web Server 4014, 4016interfaces. The assistance servers 4042 may also directly access thedatabase servers 4024 to allow the assistance servers 4042 access toaccount information about the user of the application to whichassistance is being given. In this way, the customer service agent maybe able to take action on behalf of the user on both the mobileapplication side as well as the network marketplace side. For example,the customer service agent may place bids or orders, refund money,process payments, list items, cancel item listings, process bids,process sales, or any other action associated with the networked system4002. While the assistance servers 4042 are shown in FIG. 4 as part ofthe networked system 4002, in other examples, the assistance servers4042 may be external to the networked system 4002 and may access thenetworked system 4002 through the API server 4014 or Web server 4016.

FIG. 5A shows a flowchart for an example method 5000 for assisting acustomer support agent in providing customer support, in accordance withan example embodiment. In one example embodiment, one or more of theoperations of the method 5000 may be performed by one or more of theassistance servers 4042.

In one example embodiment, a request for a remote assistance session maybe received (operation 5004). For example, a request for a remoteassistance session may be received from the client machine 4010 or theclient machine 4012. The remote assistance session may be granted andinitiated (operation 5008). For example, a connection between theassistance server 4042 and the requesting client machine may beestablished via the network 4004, and a thread corresponding to oneremote assistance session may be created.

A test may be performed to determine if a captured screen shot has beenreceived (operation 5012). For example, a captured screen shot may bereceived from web client 4006. If a captured screen shot has not beenreceived, the method may repeat operation 5012; otherwise, the receivedscreen shot may be processed and may be displayed to the customersupport agent (operation 5016). In addition, optical characterrecognition may be performed on the captured screen shot to identify thecurrent state of the client application.

Based on the information provided by the captured screen shot, one ormore actions may be determined (operation 5020). For example, if a userhas not properly entered user identification information, an emailaddress and the like, the customer support agent may determine that thecorrect information should be entered on behalf of the user. In oneexample embodiment, the assistance server 4042 may automaticallydetermine a course of action. For example, the assistance server 4042may determine that an email address entered by a user is incorrect andmay determine that the correct email address should be entered on behalfof the user.

In one example embodiment, one or more commands to execute thedetermined action(s) may be generated and issued. For example, commandscorresponding to certain keyboard keystrokes and mouse actions forentering an email address may be generated and sent to the clientmachine 4010.

FIG. 5B shows a flowchart for an example method 5050 for providingcustomer agent support to a user, in accordance with an exampleembodiment. In one example embodiment, one or more of the operations ofthe method 5050 may be performed by one or more of the client machines4010, 4012.

In one example embodiment, a request for a remote assistance session maybe received from a user (operation 5040). For example, a request for aremote assistance session may be received from a user at the clientmachine 4010 or the client machine 4012. The request for a remoteassistance session may be issued (operation 5044). For example, arequest for a remote assistance session may be issued to the assistanceserver 4042.

A test may be performed to determine if a remote assistance session hasbeen granted (operation 5048). For example, a remote assistance sessionmay be granted by the assistance server 4042. If a remote assistancesession has not been granted, the method may repeat operation 5048;otherwise, a screen shot may be captured (operation 5052) and sent tothe assistance server 4042 (operation 5056).

A test may be performed to determine if a command has been received or ascreen change has been detected (operation 5060). If a screen change hasbeen detected, the method 5050 may proceed with operation 5052. If acommand has been received, for example, from the assistance server 4042,the command may be executed (operation 5064). The method 5050 may thenproceed with operation 5060.

FIG. 6 is a block diagram illustrating an example mobile device 6115,according to an example embodiment, upon which various embodiments mayexecute. For example, the applications and functionality described inthe mobile device 3010 of FIG. 3 may be executed on a mobile device,such as the mobile device 6115. The mobile device 6115 may include aprocessor 6010. The processor 6010 may be any of a variety of differenttypes of commercially available processors suitable for mobile devices(for example, an XScale architecture microprocessor, a Microprocessorwithout Interlocked Pipeline Stages (MIPS) architecture processor, aprocessor operating according to a Reduced Instruction Set (RISC) suchas a PowerPC or Advanced RISC Machine (ARM) processor, a processoroperating according to a Complex Instruction Set (CISC) such as an Intelx086 processor, or another type of processor). A memory 6020, such as aRandom Access Memory (RAM), a Flash memory, or other type of memory, maybe communicatively coupled to the processor 6010 (e.g., through a bus orother communication pipeline). The memory 6020 may be adapted to storean operating system (OS) 6030, as well as application programs 6040,such as an application which allows users to create final product imagesaccording to the present disclosure. Example operating systems includethe Android OS developed by Google Inc., of Mountain View Calif., iOSdeveloped by Apple of Cupertino, Calif., Windows Mobile developed byMicrosoft Corp., of Redmond Wash., or the like. The processor 6010 maybe coupled, either directly or via appropriate intermediary hardware, toa display 6050 and to one or more input/output (I/O) devices 6060, suchas a keypad, a touch panel sensor, a microphone, and the like. Forexample, the mobile device 6115 may include multi-touch-screen displayswhich support input entry through multi-touch gestures. Examplemulti-touch screen displays include capacitive touch screen displays,resistive touch screen displays, and the like. Similarly, in someembodiments, the processor 6010 may be coupled to a transceiver 6070that interfaces with an antenna 6090. The transceiver 6070 may beconfigured to both transmit and receive cellular network signals,wireless data signals, or other types of signals via the antenna 6090,depending on the nature of the mobile device 6115. In this manner, aconnection with a communication network may be established. For example,the transceiver 6070 may operate in accordance with a 2^(nd) Generationwireless network (e.g., a Global System for Mobile Communications GSMnetwork, a General Packet Radio Service GPRS network), a 3^(rd)Generation wireless network (e.g., a Universal Mobile TelecommunicationsNetwork UMTS), a 4^(th) Generation wireless network (e.g., Long TermEvolution LTE, Long Term Evolution-Advanced LTE-A), a network accordingto an Institute for Electrical and Electronics Engineers IEEE 802.11family of standards (such as 802.11n) or the like. Further, in someconfigurations, a Global Positioning System (GPS) receiver 6080 may alsomake use of the antenna 6090 to receive GPS signals.

Modules, Components and Logic

Certain embodiments are described herein as including logic or a numberof components, modules, or mechanisms. Modules may constitute eithersoftware modules (e.g., code embodied on a machine-readable medium or ina transmission signal) or hardware modules. A hardware module is atangible unit capable of performing certain operations and may beconfigured or arranged in a certain manner. In example embodiments, oneor more computer systems (e.g., a standalone, client or server computersystem) or one or more hardware modules of a computer system (e.g., aprocessor or a group of processors) may be configured by software (e.g.,an application or application portion) as a hardware module thatoperates to perform certain operations as described herein.

In various embodiments, a hardware module may be implementedmechanically or electronically. For example, a hardware module maycomprise dedicated circuitry or logic that is permanently configured(e.g., as a special-purpose processor, such as a field programmable gatearray (FPGA) or an application-specific integrated circuit (ASIC)) toperform certain operations. A hardware module may also compriseprogrammable logic or circuitry (e.g., as encompassed within ageneral-purpose processor or other programmable processor) that istemporarily configured by software to perform certain operations. Itwill be appreciated that the decision to implement a hardware modulemechanically, in dedicated and permanently configured circuitry, or intemporarily configured circuitry (e.g., configured by software) may bedriven by cost and time considerations.

Accordingly, the term “hardware module” should be understood toencompass a tangible entity, be that an entity that is physicallyconstructed, permanently configured (e.g., hardwired) or temporarilyconfigured (e.g., programmed) to operate in a certain manner and/or toperform certain operations described herein. Considering embodiments inwhich hardware modules are temporarily configured (e.g., programmed),each of the hardware modules need not be configured or instantiated atany one instance in time. For example, where the hardware modulescomprise a general-purpose processor configured using software, thegeneral-purpose processor may be configured as respective differenthardware modules at different times. Software may accordingly configurea processor, for example, to constitute a particular hardware module atone instance of time and to constitute a different hardware module at adifferent instance of time.

Hardware modules can provide information to, and receive informationfrom, other hardware modules. Accordingly, the described hardwaremodules may be regarded as being communicatively coupled. Where multipleof such hardware modules exist contemporaneously, communications may beachieved through signal transmission (e.g., over appropriate circuitsand buses) that connect the hardware modules. In embodiments in whichmultiple hardware modules are configured or instantiated at differenttimes, communications between such hardware modules may be achieved, forexample, through the storage and retrieval of information in memorystructures to which the multiple hardware modules have access. Forexample, one hardware module may perform an operation and store theoutput of that operation in a memory device to which it iscommunicatively coupled. A further hardware module may then, at a latertime, access the memory device to retrieve and process the storedoutput. Hardware modules may also initiate communications with input oroutput devices, and can operate on a resource (e.g., a collection ofinformation).

The various operations of example methods described herein may beperformed, at least partially, by one or more processors that aretemporarily configured (e.g., by software) or permanently configured toperform the relevant operations. Whether temporarily or permanentlyconfigured, such processors may constitute processor-implemented modulesthat operate to perform one or more operations or functions. The modulesreferred to herein may, in some example embodiments, compriseprocessor-implemented modules.

Similarly, the methods described herein may be at least partiallyprocessor-implemented. For example, at least some of the operations of amethod may be performed by one or more processors orprocessor-implemented modules. The performance of certain of theoperations may be distributed among the one or more processors, not onlyresiding within a single machine, but deployed across a number ofmachines. In some example embodiments, the processor or processors maybe located in a single location (e.g., within a home environment, anoffice environment or as a server farm), while in other embodiments theprocessors may be distributed across a number of locations.

The one or more processors may also operate to support performance ofthe relevant operations in a “cloud computing” environment or as a“software as a service” (SaaS). For example, at least some of theoperations may be performed by a group of computers (as examples ofmachines including processors), with these operations being accessiblevia a network (e.g., the Internet) and via one or more appropriateinterfaces (e.g., APIs).

Electronic Apparatus and System

Example embodiments may be implemented in digital electronic circuitry,or in computer hardware, firmware, software, or in combinations of them.Example embodiments may be implemented using a computer program product,for example, a computer program tangibly embodied in an informationcarrier, for example, in a machine-readable medium for execution by, orto control the operation of, data processing apparatus, for example, aprogrammable processor, a computer, or multiple computers.

A computer program can be written in any form of programming language,including compiled or interpreted languages, and it can be deployed inany form, including as a stand-alone program or as a module, subroutine,or other unit suitable for use in a computing environment. A computerprogram can be deployed to be executed on one computer or on multiplecomputers at one site or distributed across multiple sites andinterconnected by a communication network.

In example embodiments, operations may be performed by one or moreprogrammable processors executing a computer program to performfunctions by operating on input data and generating output. Methodoperations can also be performed by, and apparatus of exampleembodiments may be implemented as, special purpose logic circuitry(e.g., a FPGA or an ASIC).

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other. Inembodiments deploying a programmable computing system, it will beappreciated that both hardware and software architectures meritconsideration. Specifically, it will be appreciated that the choice ofwhether to implement certain functionality in permanently configuredhardware (e.g., an ASIC), in temporarily configured hardware (e.g., acombination of software and a programmable processor), or a combinationof permanently and temporarily configured hardware may be a designchoice. Below are set out hardware (e.g., machine) and softwarearchitectures that may be deployed, in various example embodiments.

Example Machine Architecture and Machine-Readable Medium

FIG. 7 is a block diagram of machine in the example form of a computersystem 7000 within which instructions 7024 may be executed for causingthe machine to perform any one or more of the methodologies discussedherein. In alternative embodiments, the machine operates as a standalonedevice or may be connected (e.g., networked) to other machines. In anetworked deployment, the machine may operate in the capacity of aserver or a client machine in server-client network environment, or as apeer machine in a peer-to-peer (or distributed) network environment. Themachine may be a personal computer (PC), a tablet PC, a set-top box(STB), a PDA, a cellular telephone, a web appliance, a network router,switch or bridge, or any machine capable of executing instructions(sequential or otherwise) that specify actions to be taken by thatmachine. Further, while only a single machine is illustrated, the term“machine” shall also be taken to include any collection of machines thatindividually or jointly execute a set (or multiple sets) of instructionsto perform any one or more of the methodologies discussed herein.

The example computer system 7000 includes a processor 7002 (e.g., acentral processing unit (CPU), a graphics processing unit (GPU) orboth), a main memory 7004 and a static memory 7006, which communicatewith each other via a bus 7008. The computer system 7000 may furtherinclude a video display unit 7010 (e.g., a liquid crystal display (LCD)or a cathode ray tube (CRT)). The computer system 7000 also includes analphanumeric input device 7012 (e.g., a keyboard), a user interface (UI)navigation (or cursor control) device 7014 (e.g., a mouse), a disk driveunit 7016, a signal generation device 7018 (e.g., a speaker) and anetwork interface device 7020.

Machine-Readable Medium

The disk drive unit 7016 includes a machine-readable medium 7022 onwhich is stored one or more sets of data structures and instructions7024 (e.g., software) embodying or used by any one or more of themethodologies or functions described herein. The instructions 7024 mayalso reside, completely or at least partially, within the main memory7004, static memory 7006, and/or within the processor 7002 duringexecution thereof by the computer system 7000, the main memory 7004 andthe processor 7002 also constituting machine-readable media.

While the machine-readable medium 7022 is shown in an example embodimentto be a single medium, the term “machine-readable medium” may include asingle medium or multiple media (e.g., a centralized or distributeddatabase, and/or associated caches and servers) that store the one ormore instructions 7024 or data structures. The term “machine-readablemedium” shall also be taken to include any tangible medium that iscapable of storing, encoding or carrying instructions (e.g.,instructions 7024) for execution by the machine and that cause themachine to perform any one or more of the methodologies of the presentinventive subject matter, or that is capable of storing, encoding orcarrying data structures used by or associated with such instructions.The term “machine-readable medium” shall accordingly be taken toinclude, but not be limited to, solid-state memories, and optical andmagnetic media. Specific examples of machine-readable media includenon-volatile memory, including by way of example, semiconductor memorydevices (e.g., Erasable Programmable Read-Only Memory (EPROM),Electrically Erasable Programmable Read-Only Memory (EEPROM)) and flashmemory devices; magnetic disks such as internal hard disks and removabledisks; magneto-optical disks; and CD-ROM and DVD-ROM disks.

Transmission Medium

The instructions 7024 may further be transmitted or received over acommunications network 7026 using a transmission medium. Theinstructions 7024 may be transmitted using the network interface device7020 and any one of a number of well-known transfer protocols (e.g.,HTTP). Examples of communication networks include a LAN, a WAN, theInternet, mobile telephone networks, Plain Old Telephone (POTS)networks, and wireless data networks (e.g., WiFi and WiMax networks).The term “transmission medium” shall be taken to include any intangiblemedium that is capable of storing, encoding or carrying instructions forexecution by the machine, and includes digital or analog communicationssignals or other intangible media to facilitate communication of suchsoftware.

Although the present inventive subject matter has been described withreference to specific example embodiments, it will be evident thatvarious modifications and changes may be made to these embodimentswithout departing from the broader spirit and scope of the inventivesubject matter. Accordingly, the specification and drawings are to beregarded in an illustrative rather than a restrictive sense. Theaccompanying drawings that form a part hereof, show by way ofillustration, and not of limitation, specific embodiments in which thesubject matter may be practiced. The embodiments illustrated aredescribed in sufficient detail to enable those skilled in the art topractice the teachings disclosed herein. Other embodiments may be usedand derived therefrom, such that structural and logical substitutionsand changes may be made without departing from the scope of thisdisclosure. This Detailed Description, therefore, is not to be taken ina limiting sense, and the scope of various embodiments is defined onlyby the appended claims, along with the full range of equivalents towhich such claims are entitled.

Such embodiments of the inventive subject matter may be referred toherein, individually and/or collectively, by the term “invention” merelyfor convenience and without intending to voluntarily limit the scope ofthis application to any single invention or inventive concept if morethan one is in fact disclosed. Thus, although specific embodiments havebeen illustrated and described herein, it should be appreciated that anyarrangement calculated to achieve the same purpose may be substitutedfor the specific embodiments shown. This disclosure is intended to coverany and all adaptations or variations of various embodiments.

Combinations of the above embodiments, and other embodiments notspecifically described herein, will be apparent to those of skill in theart upon reviewing the above description.

All publications, patents, and patent documents referred to in thisdocument are incorporated by reference herein in their entirety, asthough individually incorporated by reference. In the event ofinconsistent usages between this document and those documents soincorporated by reference, the usage in the incorporated reference(s)should be considered supplementary to that of this document; forirreconcilable inconsistencies, the usage in this document controls.

In this document, the terms “a” or “an” are used, as is common in patentdocuments, to include one or more than one, independent of any otherinstances or usages of “at least one” or “one or more.” In thisdocument, the term “or” is used to refer to a nonexclusive or, such that“A or B” includes “A but not B,” “B but not A,” and “A and B,” unlessotherwise indicated. In the appended claims, the terms “including” and“in which” are used as the plain-English equivalents of the respectiveterms “comprising” and “wherein.” Also, in the following claims, theterms “including” and “comprising” are open-ended; that is, a system,device, article, or process that includes elements in addition to thoselisted after such a term in a claim are still deemed to fall within thescope of that claim. Moreover, in the following claims, the terms“first,” “second,” and “third,” and so forth are used merely as labels,and are not intended to impose numerical requirements on their objects.

The Abstract of the Disclosure is provided to comply with 37 C.F.R.§1.72(b), requiring an abstract that will allow the reader to quicklyascertain the nature of the technical disclosure. It is submitted withthe understanding that it will not be used to interpret or limit thescope or meaning of the claims. In addition, in the foregoing DetailedDescription, it can be seen that various features are grouped togetherin a single embodiment for the purpose of streamlining the disclosure.This method of disclosure is not to be interpreted as reflecting anintention that the claimed embodiments require more features than areexpressly recited in each claim. Rather, as the following claimsreflect, inventive subject matter lies in less than all features of asingle disclosed embodiment. Thus the following claims are herebyincorporated into the Detailed Description, with each claim standing onits own as a separate embodiment.

1. An apparatus comprising: at least one processor and memory to storeinstructions that, when executed by the at least one processor, causethe at least one processor to perform operations comprising: issuing arequest from a mobile device to a remote device for assistance; andperiodically transmitting information from the mobile device to theremote device, the information indicative of a sequence of states of anexecution of a mobile application.
 2. The apparatus of claim 1, whereinthe information describes content of a display of the mobile device. 3.The apparatus of claim 1, wherein the information includes a memory dumpof the mobile device.
 4. The apparatus of claim 1, wherein theinformation comprises captured screen shots from a display of the mobiledevice.
 5. The apparatus of claim 1, wherein the information compriseschanges to content displayed on a display of the mobile device.
 6. Theapparatus of claim 1, the operations further comprising establishing avoice connection between the remote device and the mobile device.
 7. Anapparatus comprising: at least one processor and memory to storeinstructions that, when executed by the at least one processor, causethe at least one processor to perform operations comprising: receiving arequest for assistance from a client help application on a mobiledevice; periodically receiving information from the mobile device, theinformation indicative of a sequence of states of an execution of amobile application; and emulating the mobile application of the mobiledevice based on the information, the emulating including mimicking thesequence of states of the execution of the mobile application.
 8. Theapparatus of claim 7, the operations further comprising: receiving inputwhich specifies one or more commands to be executed on the mobiledevice; and sending the one or more commands to the client helpapplication for execution on the mobile device.
 9. The apparatus ofclaim 8, the operations further comprising processing the informationfrom the mobile device to derive the input.
 10. The apparatus of claim8, wherein the input is derived by an emulator simulating activity onthe mobile device based on the information from the mobile device.
 11. Amethod comprising: issuing a request from a mobile device to a remotedevice for assistance; and periodically transmitting information fromthe mobile device to the remote device, the information indicative of asequence of states of an execution of a mobile application.
 12. Themethod of claim 11, wherein the information describes content of adisplay of the mobile device.
 13. The method of claim 11, wherein theinformation includes a list of processes executing on the mobile device.14. The method of claim 11, wherein the information comprises capturedscreen shots from a display of the mobile device.
 15. The method ofclaim 11, wherein the information comprises changes to content displayedon a display of the mobile device.
 16. The method of claim 11, whereinthe issuance of the request is performed automatically in response todetecting an error of the mobile application.
 17. A method comprising:receiving a request for assistance from a client help application on amobile device; periodically receiving information from the mobiledevice, the information indicative of a sequence of states of anexecution of a mobile application; and emulating the mobile applicationof the mobile device based on the information, the emulating includingmimicking a sequence of states of the execution of the mobileapplication.
 18. The method of claim 17, further comprisingautomatically determining a course of action for providing theassistance based on the emulation.
 19. The method of claim 17, furthercomprising: receiving input which specifies one or more commands to beexecuted on the mobile device; and sending the one or more commands tothe client help application for execution on the mobile device, whereinthe input is derived by an emulator simulating activity on the mobiledevice based on the information from the mobile device.
 20. Anon-transitory computer-readable medium embodying instructions that,when executed by a processor, perform operations comprising: issuing arequest from a mobile device to a remote device for assistance; andperiodically transmitting information from the mobile device to theremote device, the information indicative of a sequence of states of anexecution of a mobile application.